﻿using System;
using System.Globalization;
using System.Windows.Data;
using Iot.Shared.Enums;
using Iot.Shared.Helper;

namespace Iot.RealTimeData.WPF.Prism.ValueConverter;

/// <summary>
///     值到字符串的转换器，用于将各种类型的值转换为字符串表示形式
/// </summary>
public class ValueToStrConverter : IValueConverter
{
    /// <summary>
    ///     将值转换为字符串
    /// </summary>
    /// <param name="value">要转换的值</param>
    /// <param name="targetType">目标类型</param>
    /// <param name="parameter">转换参数，可以是格式字符串</param>
    /// <param name="culture">区域性信息</param>
    /// <returns>转换后的字符串表示</returns>
    public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        return value switch
        {
            // 处理double类型，使用默认"F2"格式或指定的格式字符串
            double onValue => onValue.ToString(parameter as string ?? "F2"),
            // 处理float类型，使用默认"F2"格式或指定的格式字符串
            float onValue => onValue.ToString(parameter as string ?? "F2"),
            // 处理int类型，使用指定的格式字符串
            int onValue => onValue.ToString(parameter as string),
            // 处理long类型，使用指定的格式字符串
            long onValue => onValue.ToString(parameter as string),
            // 处理Switching类型，根据状态返回"正常"或"告警"
            Switching onValue => onValue == Switching.Normal ? "正常" : "告警",
            // 处理其他枚举类型，从缓存中获取对应的字符串表示
            Enum onValue => onValue.GetDisplayName(),
            // 处理null值，返回"=="
            null => "==",
            // 其他类型返回"--"
            _ => "--"
        };
    }

    /// <summary>
    ///     将字符串转换回值（未实现）
    /// </summary>
    /// <param name="value">要转换的字符串</param>
    /// <param name="targetType">目标类型</param>
    /// <param name="parameter">转换参数</param>
    /// <param name="culture">区域性信息</param>
    /// <returns>抛出NotImplementedException异常</returns>
    /// <exception cref="NotImplementedException">始终抛出此异常</exception>
    public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}